package main

import (
. "./pecaPkg" 
. "fmt"
. "./util"
. "./entradaSaida"
. "./tabuleiro"
. "./jogador")

var inicio string = "---------------- Início de Jogo ----------------" 
var jogador_um string = "           Jogador 1 : peças PRETAS"
var jogador_dois string = "           Jogador 2 : peças VERMELHAS"
var prompt string = ">>> "
var jogador_escolhe string = "escolha qual peça você quer movimentar, indicando cada coordenada e em seguida teclando enter: "
var movimenta_peca string = "Agora escolha para onde você quer movimentar sua peça, indicando cada coordenada e em seguida teclando enter: "
var vertical string = "Coordenada Vertical: "
var horizontal string = "Coordenada Horizontal: "
var tomada_realizada string = "A seguinte tomada foi realizada:"
var barra string = "===== "

func Jogar (){
	
	var tabuleiro_jogo *Tabuleiro = new(Tabuleiro)
	tabuleiro_jogo.PreencherTabuleiro()
	var jogador1 *Jogador = new(Jogador)
	jogador1.SetCor(Preto)
	var jogador2 *Jogador = new(Jogador)
	jogador2.SetCor(Vermelho)
	
	var jogador_atual *Jogador = jogador1;
	
	Println (inicio)
	Println(jogador_um)
	Println(jogador_dois)
	Println("")
	Println (prompt + "Jogador 1 inicia o jogo!")
	Println (prompt + "Jogador 1, " + jogador_escolhe)
	Println("")
	tabuleiro_jogo.ImprimeTabuleiro()
	
	// Aqui deve ser feita a tomada máxima.Caso seja igual, o usuário deverá escolher a tomada a ser realizada. 
	
	var tomadas [50]* Node = *new ([50] *Node)
	
	//Inicio do Loop!
	
	for i:=0; i<=0; i--{
	
	if (tomadas[0] == nil){
		Println (prompt + "Não existem peças a serem comidas. Escolha uma peça do tabuleiro para mover!")
	} else if (tomadas[1] == nil){
		Println (prompt, tomada_realizada)
		ImprimeOpcoes (tomadas)
	}else{
		Println ("Existem mais de um caminho com o mesmo número de peças a serem comidas. Qual das seguintes você deseja?")
		ImprimeOpcoes (tomadas)
		var opcao_tomada int = ReadInt()
		num_tomadas := GetNumeroTomadas(tomadas)
		for opcao_tomada < 1 && opcao_tomada > num_tomadas{
			Print("Digite Novamente uma opcão de tomada:")
			opcao_tomada = ReadInt()
		}
		//realiza tomada
		Println(prompt + tomada_realizada)
		ImprimeCaminhoNode(tomadas[opcao_tomada], 1)
		
		
	}
	
	for i:=0; i>=0; i++{
	
	Print (prompt + vertical)
	
	x_origem := ReadInt()
	Print (prompt + horizontal)
	
	y_origem := ReadInt()
	Println (prompt + movimenta_peca)
	
	Print (prompt + vertical)
	x_destino := ReadInt()
	
	Print (prompt + horizontal)
	
	y_destino := ReadInt()
	
	if (tabuleiro_jogo.MoverPeca(x_origem, y_origem, x_destino, y_destino, jogador_atual.GetCor(), false)){
		Println(prompt + "Peça (", GetStringCor(jogador_atual.GetCor()),") movida de (", x_origem, ",",y_origem, ") para (", x_destino, ", ", y_destino, ")")
		break
	}
	Println(prompt + "Movimentação inválida, tente novamente.")	
	
	}
	
	if (tabuleiro_jogo.IsZerou (jogador1.GetCor())){
		Println(barra + "Jogador", jogador2.GetCor() + 1, "VENCEU! PARABÉNS", barra)
		break
	}else if (tabuleiro_jogo.IsZerou (jogador2.GetCor())){
		Println(barra + "Jogador", jogador1.GetCor() + 1, "VENCEU! PARABÉNS", barra)
		break
	}else if (tabuleiro_jogo.IsTravou (jogador1.GetCor())){
		Println(barra + "Jogador", jogador2.GetCor() + 1, "VENCEU! PARABÉNS", barra)
		break
	}else if (tabuleiro_jogo.IsTravou (jogador2.GetCor())){
		Println(barra + "Jogador", jogador1.GetCor() + 1, "VENCEU! PARABÉNS", barra)
		break
	}
	
	tabuleiro_jogo.ImprimeTabuleiro()
	jogador_atual = jogador2;
	
	}	

}


func main (){
	Jogar()	

}
	
 